#ifndef PRUEBACOMPONENTE_H_
#define PRUEBACOMPONENTE_H_

#include "Alumno.h"
#include "ClaveAlumno.h"
#include "../Registro.h"
#include "../Bloque.h"

void pruebaAlumno(Toolkit::TipoSerializacion tSerializacion)
{
	Toolkit::Alumno a(87712, "Facundo Olano Jr.", tSerializacion);	
	Toolkit::Alumno b(0, "", tSerializacion);
	
	stringstream stream;
	a.serializar(stream);
	std::cout << "La serializacion es: " << stream.str() << std::endl;
	
	b.hidratar(stream);
	std::cout << "Hidratacion, nombre: " << b.getNombre() << ", padron: " 
			<< b.getPadron() << std::endl;	
}

void pruebaClaveAlumno(Toolkit::TipoSerializacion tSerializacion)
{
	Toolkit::ClaveAlumno a(87712, tSerializacion);	
	Toolkit::ClaveAlumno b(0, tSerializacion);
	
	stringstream stream;
	a.serializar(stream);
	std::cout << "La serializacion es: " << stream.str() << std::endl;
	
	b.hidratar(stream);
	std::cout << "Hidratacion, padron: " << b.getPadron() << std::endl;	
}

void pruebaRegistro(Toolkit::TipoSerializacion tSerializacion)
{
	Toolkit::Registro r(tSerializacion);
	Toolkit::Alumno facundo(87712, "Facundo Olano Jr.", tSerializacion);
	
	r.setDato(facundo);
	
	stringstream stream;
	r.serializar(stream);
	
	std::cout << "registro serializado: " << stream.str() << std::endl;	
	 
	Toolkit::Registro r2(tSerializacion);
	Toolkit::Alumno otro(1111, "Pepe Artigas", tSerializacion);
	r2.hidratar(stream, otro);
	
	Toolkit::Alumno ultimo(0, "Marcel Dupont", tSerializacion);
	
	r2.hidratarDato(ultimo);
	
	std::cout << "Dato recuperado, nombre: " << ultimo.getNombre() << ", padron: " 
			<< ultimo.getPadron() << std::endl;
	
}

void pruebaBloque(Toolkit::TipoSerializacion tSerializacion)
{
	Toolkit::Alumno facundo(87712, "Facundo Olano Jr.", tSerializacion);
	Toolkit::Alumno dupont(55555, "Marcel Dupont", tSerializacion);
	Toolkit::Alumno artigas(11111, "Pepe Artigas", tSerializacion);
	
	Toolkit::Registro *rFacundo = new Toolkit::Registro(tSerializacion);
	rFacundo->setDato(facundo);
	Toolkit::Registro *rDupont = new Toolkit::Registro(tSerializacion);
	rDupont->setDato(dupont);
	Toolkit::Registro *rArtigas = new Toolkit::Registro(tSerializacion);
	rArtigas->setDato(artigas);
	
	unsigned long int tamanoBloque = 100;
	Toolkit::Bloque bloque(tamanoBloque, tSerializacion);
	
	bloque.agregar(rFacundo, Toolkit::ClaveAlumno(facundo.getPadron(), tSerializacion));
	bloque.agregar(rDupont, Toolkit::ClaveAlumno(dupont.getPadron(), tSerializacion));
	bloque.agregar(rArtigas, Toolkit::ClaveAlumno(artigas.getPadron(), tSerializacion));
	
	stringstream stream;
	bloque.serializar(stream);
	
	std::cout << "bloque serializado: " << stream.str() << std::endl;	
	
	Toolkit::Bloque bloqueRecuperado(tamanoBloque, tSerializacion);
	bloqueRecuperado.hidratar(stream, facundo);
	Toolkit::Registro *registroRecuperado = 
		(Toolkit::Registro*) bloqueRecuperado.buscar(
		Toolkit::ClaveAlumno(artigas.getPadron(), tSerializacion));
	
	Toolkit::Alumno recuperado(0, "", tSerializacion);
	registroRecuperado->hidratarDato(recuperado);
	
	std::cout << "Dato recuperado, nombre: " << recuperado.getNombre() << ", padron: " 
			<< recuperado.getPadron() << std::endl;
}

void pruebaMalaLecheBloque()
{
	//te la debo	
}



#endif /*PRUEBACOMPONENTE_H_*/
